//
// Created by 李传智 on 2018/4/12.
//

#ifndef ANDSDK_FFDECODE_H
#define ANDSDK_FFDECODE_H


#include "IDecode.h"

struct AVCodecContext;
struct AVFrame;

class FFDecode : public IDecode {

public:
    static void initHard(void * vm);

    // 打开解码器
    virtual bool open(CodecParameter codecParameter, bool isHard = false);

    void close();

    // future 模型
    // 发送数据到线程解码
    virtual bool sendPacket(VideoData pkt);

    // 从线程中获取解码结果
    virtual VideoData receiveFrame();

    virtual void clear();

protected:
    // 解码器上下文
    AVCodecContext *codecContext = 0;

    std::mutex mutex;

    // 解码后的帧数据
    AVFrame *frame = 0;
};


#endif //ANDSDK_FFDECODE_H
